// 请求配置
const config = {
  timeout: 10000, // 请求超时时间
  header: {
    'Content-Type': 'application/json'
  },
  // baseURL: 'http://120.46.20.35:3000/api' // 添加基础URL
  // baseURL: 'http://123.60.137.241:3000/api' // 添加基础URL
  baseURL: 'https://gxfc.bfhldd28.com/api', // 线上地址
  specialURL: 'https://hlw.bfhldd28.com/index.php/api' // 特殊接口地址
  // baseURL: 'http://localhost:3000/api' // 添加基础URL
}

// 请求拦截器
const requestInterceptor = (options) => {
  console.log('requestInterceptor options:', options);
  // 合并请求配置
  options.timeout = config.timeout
  options.header = { ...config.header, ...options.header }

  // 处理baseURL
  if (options.url.includes('/index/getip')) {
    options.url = `${config.specialURL}${options.url}`
  } else if (options.baseURL) {
    options.url = `${options.baseURL}${options.url}`
    delete options.baseURL // 删除baseURL，避免重复拼接
  } else {
    options.url = `${config.baseURL}${options.url}`
  }

  // 如果是微信营销接口，使用自定义的Authorization
  if (options.url.includes('/v3/marketing/favor/users/')) {
    
    // 如果传入了自定义的Authorization，则使用自定义的
    if (options.header && options.header['Authorization']) {
      return options
    }
  }
  // 其他接口使用默认的token处理
  const token = uni.getStorageSync('token')
  if (token) {
    options.header = options.header || {}
    options.header['Authorization'] = `Bearer ${token}`
  }

  return options
}

// 响应拦截器
const responseInterceptor = (response) => {
  const { statusCode, data } = response

  // 请求成功
  if (statusCode >= 200 && statusCode < 300) {
    // 判断业务状态码
    if (data.code === '000000'||data.code == '1'||data.openid||data.coupon_id) {
      return data
    }
    // 业务状态码错误
    uni.showToast({
      title: data.msg ||'请求失败',
      icon: 'none'
    })
    return Promise.reject(data)
  }

  // 处理特定状态码
  switch (statusCode) {
    case 401:
      // token过期或未授权
      uni.showToast({
        title: '请重新登录',
        icon: 'none'
      })
      // 可以在这里处理登出逻辑
      break
    case 403:
      uni.showToast({
        title: '没有权限访问',
        icon: 'none'
      })
      break
    case 404:
      uni.showToast({
        title: '请求的资源不存在',
        icon: 'none'
      })
      break
    case 500:
      uni.showToast({
        title: '服务器错误',
        icon: 'none'
      })
      break
    default:
      uni.showToast({
        title: '请求失败',
        icon: 'none'
      })
  }

  return Promise.reject(response)
}

// 封装请求方法
const request = (options = {}) => {
  // 应用请求拦截器
  options = requestInterceptor(options)

  return new Promise((resolve, reject) => {
    uni.request({
      ...options,
      success: (res) => {
        try {
          // 应用响应拦截器
          resolve(responseInterceptor(res))
        } catch (error) {
          reject(error)
        }
      },
      fail: (err) => {
        uni.showToast({
          title: '网络请求失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

// 封装常用请求方法
const http = {
  get(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'GET',
      ...options
    })
  },

  post(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'POST',
      ...options
    })
  },

  put(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'PUT',
      ...options
    })
  },

  delete(url, data = {}, options = {}) {
    return request({
      url,
      data,
      method: 'DELETE',
      ...options
    })
  }
}

export default http